package br.com.salao.ejb.dao.impl;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.apache.log4j.Logger;

import br.com.salao.ejb.dao.BairroDao;
import br.com.salao.entity.Bairro;
import br.com.salao.entity.Endereco;

public class BairroDaoImpl implements BairroDao {

	private Logger logger = Logger.getLogger(BairroDaoImpl.class.getName());	
	private final GenericDao<Bairro> dao;
	private EntityManager em;

	public BairroDaoImpl(EntityManager em){
		this.em = em;
		dao = new GenericDao<Bairro>(em, Bairro.class);
	}

	public Bairro incluir(Bairro bairro) {
		return dao.salvar(bairro);
	}

	public Bairro buscarBairroPorNome(Bairro bairro){

		try{
			Query query = em.createQuery("from Bairro b where b.descricao like :bairro");
			query.setParameter("bairro", bairro.getDescricao());
			bairro = (Bairro) query.getSingleResult();
			
		}catch (Exception e) {
			
			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");

			logger.error(sb.toString());

			e.printStackTrace();
			bairro = null;			
		}
		
		return bairro;
	}

	@SuppressWarnings("unchecked")
	public List<Bairro> listarBairrosPorIdCidade(int idCidade){
		
		List<Bairro> bairros = new ArrayList<Bairro>();

		try {
			
			Query query = em.createQuery("from Bairro c where c.cidade.id = :idCidade");
			query.setParameter("idCidade", idCidade);
			bairros = (List<Bairro>)query.getResultList();
			
		} catch (Exception e) {
			
			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace() + "\n");
			sb.append(e.getCause() + "\n");
			sb.append(e.getMessage() + "\n");

			logger.error(sb.toString());

			e.printStackTrace();
		} 
		return bairros;
	}	
	
}
